﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using CapaDatos;
using CapaDeEntidades;


namespace CapaNegocio
{
    public class Controladora
    {
        public Controladora() { }
        #region USUARIO
        
        public  Socio ValidarUsuario(string usuario, string pass)
        {

           return GetFactory().GetSocioDAO().ValidarSocio(usuario, pass);
            
        }

        #endregion

        #region PRESTAMO

/*        public static bool GenerarPrestamo()
          { }

          public static DataSet DevolverListaPrestamos()
          { }

          public static DataSet DevolverListaPrestamosVencidos()
          { }
        */

        public Prestamo RegistrarPrestamo( Libro libroPrestamo,DateTime fechaPrestamo, Socio socio)
        {
            Prestamo prestamo = new Prestamo();
            if (Validar(libroPrestamo, fechaPrestamo, socio))
            {
                ActualizarCantidadEjemplares(libroPrestamo);
                prestamo.FechaDevolucion = fechaPrestamo.AddDays(7);
                prestamo.Socio = socio;
                prestamo.Libro = libroPrestamo;
                prestamo.FechaPrestamo = DateTime.Now;
                GetFactory().GetPrestamoDAO().Save(prestamo);
                return prestamo;
            }
            else
                return null;
        }

        private void ActualizarCantidadEjemplares(Libro libroPrestamo)
        {
            int cantEjemplaresActuales;
            cantEjemplaresActuales=libroPrestamo.CantidadDisponible-1;
            libroPrestamo.CantidadDisponible = cantEjemplaresActuales;
            GetFactory().GetLibroDAO().Update(libroPrestamo);
        }

        private bool Validar(Libro libroPrestamo, DateTime fechaPrestamo, Socio socio)
        {

            if (libroPrestamo == null  || libroPrestamo.CantidadDisponible==0)
                return false;

            if (fechaPrestamo.CompareTo(DateTime.Now) > 0)
                return false;
            if (socio == null)
                return false;

            return true;


        }


        #endregion

        #region SOCIO

        public static bool RegistrarSocio(long dni,string nombre,string mail,string usuario,string pass)
        {
            Socio socio = new Socio();
            socio.Dni = dni;
            socio.NombreApellido = nombre;
            socio.email = mail;
            socio.Usuario = usuario;
            socio.Pass = pass;

            return SocioDatos.RegistrarSocio(socio);
        }

        public static bool ModificarSocio(long dni, string nombre, string mail, string usuario, string pass)
        {
            Socio socio = new Socio();
            socio.Dni = dni;
            socio.NombreApellido = nombre;
            socio.email = mail;
            socio.Usuario = usuario;
            socio.Pass = pass;

            return SocioDatos.ModificarSocio(socio);
        }

        public static bool DarDeBajaSocio(long dni)
        {
            Socio socio = new Socio();
            socio.Dni = dni;

            return SocioDatos.DarBajaSocio(socio);
        }

        public DataSet DevolverDatosSocio(int idSocio)
        {
            Socio socio = new Socio();
            socio.Dni = idSocio;
            return SocioDatos.ConsultaSocio(socio);
        }
        public Socio GetSocio(int idSocio)
        {
           return GetFactory().GetSocioDAO().GetById(idSocio);
        }

        #endregion

        #region RESERVA
        
       /* public static bool RegistrarReserva()
        { }
        */
        #endregion

        #region LIBRO

        public static bool RegistrarLibro(string autor, int cantEj, long isbn, string titulo)
        {
            Libro libro = new Libro();
            libro.Autor = autor;
            libro.CantidadDisponible = cantEj;
            libro.Isbn = isbn;
            libro.Titulo = titulo;

            return LibroDatos.RegistrarLibro(libro);
        }

        public static bool ModificarLibro(int idLibro, string autor, int cantEj, long isbn, string titulo)
        {
            Libro libro = new Libro();
            libro.Autor = autor;
            libro.CantidadDisponible = cantEj;
            libro.Isbn = isbn;
            libro.Titulo = titulo;
            libro.Codigo = idLibro;


            return LibroDatos.ModificarLibro(libro);
        }

        public static bool DarDeBajaLibro(int idLibro)
        {
            Libro libro = new Libro();
            libro.Codigo = idLibro;
            return LibroDatos.DarBajaLibro(libro);
        }

        public DataSet DevolverCatalogoLibros()
        {
            return LibroDatos.ConsultaCatalogoLibros();
        }

        public IList<Libro> GetLibroByTitulo(string titulo)
        {
            return GetFactory().GetLibroDAO().GetLibroByTitulo(titulo);
            
        }

   

        
        



        #endregion


        private   FactoryDAO GetFactory()
        {
            return FactoryDAO.Instance;

            
        }



    }
}
